package br.edu.utfpr.bsi.si.fuzzy;

import net.sourceforge.jFuzzyLogic.FIS;
import br.edu.utfpr.bsi.si.Config;
import br.edu.utfpr.bsi.si.team.jogadores.Robo;

public class Fuzzy {
	
	private static String fileName = Config.fileName;
	private FIS fis;
	
	public Fuzzy() {
		fis = FIS.load(fileName,true);
		if(fis == null) { 
            System.err.println("Can't load file: '" + fileName + "'");
            System.exit(666);
        }
	}
	
	/**
	 * 
	 * @param robo
	 * @return funcao
	 * 
	 * Retorna a funcao que o robo deve desempenhar no momento, de acordo com a logica fuzzy
	 */
	public char getRobotFunction(Robo robo) {
		
		double distanciaRefem = robo.distanciaRefem();
		double distanciaPrisioneiro = robo.distanciaPrisioneiro();
		double distanciaAdversarioMaisProximo = robo.distanciaAdversarioMaisProximo();
		double distanciaAdversarioMaisProximoRefem = Robo.ambiente.distanciaAdversarioMaisProximoRefem();
		double distanciaAdversarioMaisProximoPrisioneiro = Robo.ambiente.distanciaAdversarioMaisProximoPrisioneiro();
		
		fis.setVariable("distanciaRefem",distanciaRefem); 
        fis.setVariable("distanciaPrisioneiro", distanciaPrisioneiro);
        fis.setVariable("distanciaAdversarioMaisProximo", distanciaAdversarioMaisProximo);
        fis.setVariable("distanciaAdversarioMaisProximoRefem", distanciaAdversarioMaisProximoRefem);
        fis.setVariable("distanciaAdversarioMaisProximoPrisioneiro", distanciaAdversarioMaisProximoPrisioneiro);
        fis.evaluate();
        
        System.out.println("Dist refem: "+distanciaRefem);
        System.out.println("Dist Prisi: "+distanciaPrisioneiro);
        System.out.println("Dist ADV Prisi: "+distanciaAdversarioMaisProximoPrisioneiro);
        System.out.println("========================");
        
        //fis.getVariable("jogador").chartDefuzzifier(true);
        System.out.println(fis.getVariable("jogador").toString());
        System.out.println("bla "+fis.getVariable("jogador").getMembership("Atacante"));
        
        if (fis.getVariable("jogador").getMembership("Atacante") >= fis.getVariable("jogador").getMembership("Defensor"))
        	return ('A');
        else
        	return ('D');
	}
	
}
